package com.zjcloud.academic.mapper;

import com.zjcloud.academic.domain.ScScheduleResult;
import com.zjcloud.academic.domain.vo.ScScheduleResultVo;
import com.zjcloud.academic.domain.bo.ScScheduleResultBo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 排课结果Mapper接口
 * 
 * @author zjcloud
 * @date 2024-06-01
 */
public interface AcademicScScheduleResultMapper {

    /**
     * 查询排课结果
     * 
     * @param id 排课结果主键
     * @return 排课结果
     */
    ScScheduleResult selectScScheduleResultById(Long id);

    /**
     * 查询排课结果列表
     * 
     * @param scScheduleResult 排课结果
     * @return 排课结果集合
     */
    List<ScScheduleResult> selectScScheduleResultList(ScScheduleResult scScheduleResult);

    /**
     * 新增排课结果
     * 
     * @param scScheduleResult 排课结果
     * @return 结果
     */
    int insertScScheduleResult(ScScheduleResult scScheduleResult);

    /**
     * 修改排课结果
     * 
     * @param scScheduleResult 排课结果
     * @return 结果
     */
    int updateScScheduleResult(ScScheduleResult scScheduleResult);

    /**
     * 删除排课结果
     * 
     * @param id 排课结果主键
     * @return 结果
     */
    int deleteScScheduleResultById(Long id);

    /**
     * 批量删除排课结果
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteScScheduleResultByIds(Long[] ids);

    /**
     * 根据批次号查询排课结果
     * 
     * @param batchNo 批次号
     * @return 排课结果集合
     */
    List<ScScheduleResult> selectResultsByBatchNo(@Param("batchNo") String batchNo);

    /**
     * 根据学期ID查询排课结果
     * 
     * @param semesterId 学期ID
     * @return 排课结果集合
     */
    List<ScScheduleResult> selectResultsBySemesterId(@Param("semesterId") Long semesterId);

    /**
     * 根据教师ID查询排课结果
     * 
     * @param teacherId 教师ID
     * @return 排课结果集合
     */
    List<ScScheduleResult> selectResultsByTeacherId(@Param("teacherId") Long teacherId);

    /**
     * 根据教室ID查询排课结果
     * 
     * @param classroomId 教室ID
     * @return 排课结果集合
     */
    List<ScScheduleResult> selectResultsByClassroomId(@Param("classroomId") Long classroomId);

    /**
     * 根据班级ID查询排课结果
     * 
     * @param classId 班级ID
     * @return 排课结果集合
     */
    List<ScScheduleResult> selectResultsByClassId(@Param("classId") Long classId);

    /**
     * 根据课程ID查询排课结果
     * 
     * @param courseId 课程ID
     * @return 排课结果集合
     */
    List<ScScheduleResult> selectResultsByCourseId(@Param("courseId") Long courseId);

    /**
     * 检查排课冲突
     * 
     * @param scScheduleResult 排课结果
     * @return 冲突数量
     */
    int checkScheduleConflict(ScScheduleResult scScheduleResult);

    /**
     * 获取排课统计数据
     * 
     * @param semesterId 学期ID
     * @return 统计数据
     */
    List<ScScheduleResult> getScheduleStatistics(@Param("semesterId") Long semesterId);

    /**
     * 根据多条件查询排课结果
     * 
     * @param batchNo 批次号
     * @param semesterId 学期ID
     * @param teacherId 教师ID
     * @param classroomId 教室ID
     * @param classId 班级ID
     * @param courseId 课程ID
     * @return 排课结果集合
     */
    List<ScScheduleResult> selectResultsByConditions(
        @Param("batchNo") String batchNo,
        @Param("semesterId") Long semesterId,
        @Param("teacherId") Long teacherId,
        @Param("classroomId") Long classroomId,
        @Param("classId") Long classId,
        @Param("courseId") Long courseId
    );

    /**
     * 根据多条件删除排课结果
     * 
     * @param batchNo 批次号
     * @param semesterId 学期ID
     * @param teacherId 教师ID
     * @param classroomId 教室ID
     * @param classId 班级ID
     * @param courseId 课程ID
     * @return 删除结果
     */
    int deleteResultsByConditions(
        @Param("batchNo") String batchNo,
        @Param("semesterId") Long semesterId,
        @Param("teacherId") Long teacherId,
        @Param("classroomId") Long classroomId,
        @Param("classId") Long classId,
        @Param("courseId") Long courseId
    );

    /**
     * 根据批次号删除排课结果
     * 
     * @param batchNo 批次号
     * @return 删除结果
     */
    int deleteResultsByBatchNo(@Param("batchNo") String batchNo);

    /**
     * 根据学期ID删除排课结果
     * 
     * @param semesterId 学期ID
     * @return 删除结果
     */
    int deleteResultsBySemesterId(@Param("semesterId") Long semesterId);

    /**
     * 根据任务ID查询排课结果
     * 
     * @param taskId 任务ID
     * @return 排课结果集合
     */
    List<ScScheduleResult> selectResultsByTaskId(@Param("taskId") String taskId);

    /**
     * 查询排课监控列表
     * 
     * @param scScheduleResult 排课结果
     * @return 排课结果集合
     */
    List<ScScheduleResult> selectScheduleMonitorList(ScScheduleResult scScheduleResult);

    /**
     * 查询排课监控数量
     * 
     * @param scScheduleResult 排课结果
     * @return 排课结果数量
     */
    int selectScheduleMonitorCount(ScScheduleResultBo scScheduleResult);

    /**
     * 批量新增排课结果
     * 
     * @param scScheduleResultList 排课结果列表
     * @return 结果
     */
    int batchInsertScScheduleResult(@Param("scScheduleResultList") List<ScScheduleResult> scScheduleResultList);

    /**
     * 根据批次号删除排课结果
     * 
     * @param scheduleBatch 排课批次
     * @return 结果
     */
    int deleteScScheduleResultByBatch(@Param("scheduleBatch") String scheduleBatch);
}